package fragment.contact;

import android.text.TextUtils;

import com.example.menhoo.toollibrary.android.log.Log;
import com.example.menhoo.toollibrary.common.utils.StringUtil;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.util.LogUtils;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

import application.AppApplication;
import application.HttpUrlConstant;
import fragment.Contacts1;
import interfaces.IReturnObject;
import model.EmployeeItemDBModel;

/**
 * Created by ThinkPad on 2017/5/22.
 */

public class ContactsPersenter {

    private ContactsModel model;
    private Contacts1 fragment;

//    public ContactsPersenter(Contacts fragment){
//        model = new ContactsModel();
//        this.fragment = fragment;
//    }

    public ContactsPersenter(Contacts1 fragment){
        model = new ContactsModel();
        this.fragment = fragment;
    }

    public void initFirstListData(ArrayList<EmployeeItemDBModel> DataList){

        if(DataList!=null){
            setListDataByHadList(DataList);//有预设数据 直接显示
        }else{
            //先看看组织机构有没有更新过，如果有就从网上获取数据，没有就直接读取数据库
            //只看到了查数据库 没看到存。别管他的鬼扯     getFirstTime();
            getListDeptDataHomeByNet();//获取数据
        }

    }
    public void getListDeptDataHomeByNet(){
        getListDeptDataByNet("0",true);//deptID是0时 为获取底层组织结构
    }

    /**
     * 获取上次的历史记录。因为调用者为fragment的onBackPress
     * 所以需要返回是否吧back事件传递给activity
     * true为 消费掉事件
     * false为 交给activity
     * @return
     */
    public String getListDataDataPreviousByNet(){
        String deptID = model.backDeptID();
        LogUtils.e("返回键deptID-getListDataDataPreviousByNet："+deptID);

        if(TextUtils.isEmpty(deptID)){

        }else {
            getListDeptDataByNet(deptID, false);

        }
        return deptID;
    }
    public boolean getIsBackHome(){
        String deptID = model.backDeptID();
        LogUtils.e("返回键deptID："+deptID);
        if(TextUtils.isEmpty(deptID)){
            return true;
        }else {
            if (deptID.equalsIgnoreCase("0")) {
                return true;
            }else {
                return false;
            }

        }
    }
    public void getListDeptDataByNet(final String deptID, final boolean isPop) {//deptID是查找变量。isPop是否入历史栈
        fragment.showLoading();
        if (deptID.equalsIgnoreCase("all")) {
            LogUtils.e("请求所有人");
            fragment.Get(HttpUrlConstant.getWebSiteFullUrl(HttpUrlConstant.AccountAllAndroid), new IReturnObject<String>() {
                @Override
                public void returnResult(String result) {
                    LogUtils.d(result);
                    if(isPop) model.setDeptID(deptID);
                    initializeAdapter(result, deptID);
                }
            });
        } else {
            RequestParams params = new RequestParams();
            params.addQueryStringParameter("__session__", AppApplication.getSession());
            params.addQueryStringParameter("deptid", deptID);
            LogUtils.e("请求人员组织__session__："+AppApplication.getSession());
            LogUtils.e("请求人员组织deptid："+deptID);
            fragment.httpGet(HttpUrlConstant.getWebSiteFullUrl(HttpUrlConstant.AccountList), params, new IReturnObject<String>() {
                @Override
                public void returnResult(String result) {
                    LogUtils.d(result);
                    if(isPop) model.setDeptID(deptID);
                    initializeAdapter(result, deptID);
                }
            });
        }
    }

    private void initializeAdapter(final String result, final String deptID){

        int size=0;
        List<EmployeeItemDBModel> listData = null;
        try {
            JSONObject jsonResult = new JSONObject(result);
            if(jsonResult.getBoolean("Succeed")){
                if(deptID.equalsIgnoreCase("all")) {
                    listData = model.getEmployeeItemDBModelsFromAll(jsonResult);
                }else{
                    boolean isHaveHead = false;
                    if(deptID.equalsIgnoreCase("0")){
                        isHaveHead = true;
                    }
                    listData = model.getEmployeeItemDBModelsFromNomal(isHaveHead, jsonResult);
                }

                if(listData.size()==0){
                    fragment.showEmpty();
                }else{
                    final List<EmployeeItemDBModel> finalListData = listData;
                    fragment.setAdapterNotifyDataSetChanged(finalListData);
                }
            }
            else{
                fragment.showError(new IReturnObject<String>() {
                    @Override
                    public void returnResult(String result) {
                        initializeAdapter(result, deptID);
                    }
                });

            }

        } catch (JSONException e) {
            fragment.showError(new IReturnObject<String>() {
                @Override
                public void returnResult(String result) {
                    initializeAdapter(result, deptID);
                }
            });

        }
    }

    /**
     * 从进来就已有数据的时候的 处理
     * 不清楚干嘛的 直接贴过来的
     * @param DataList
     */
    private void setListDataByHadList(ArrayList<EmployeeItemDBModel> DataList){
        LogUtils.e("setListDataByHadList");
        if (DataList!=null&&DataList.size()>0){
            fragment.setAdapterNotifyDataSetChanged(DataList);
        }else {
            fragment.showEmpty();
        }
//        Hashtable<String,ArrayList<EmployeeItemDBModel>> hashtable = new Hashtable();
//
//        if(DataList!=null){
//            for(EmployeeItemDBModel item : DataList){
//                LogUtils.e("item.Name:"+item.Name);
//                String pinyin = StringUtil.getCharacterPinYin(item.Name.charAt(0));
//                LogUtils.e("pinyin:"+pinyin);
//                String index_t = null;
//                if(pinyin!=null){
//                    index_t=pinyin.substring(0,1).toUpperCase();
//                }
//                if(index_t!=null){
//                    ArrayList<EmployeeItemDBModel> value= hashtable.get(index_t);
//                    if(value==null){
//                        ArrayList<EmployeeItemDBModel> list = new ArrayList<>();
//                        list.add(item);
//                        hashtable.put(index_t,list);
//                    }else{
//                        value.add(item);
//                    }
//
//                }
//            }
//
//        }
//        List<EmployeeItemDBModel> listData = new ArrayList<EmployeeItemDBModel>();
//        int size=0;
//        int count =0;
//
//        for(int j=0;j<ContactsModel.indexChar.length;j++)
//        {
//            if(hashtable.containsKey(ContactsModel.indexChar[j])){
//                String key = ContactsModel.indexChar[j];
//                ArrayList<EmployeeItemDBModel> list= hashtable.get(key);
//                listData.add(new EmployeeItemDBModel(EmployeeItemDBModel.SECTION,key));
//                size++;
//                for(EmployeeItemDBModel item : list){
//                    item.type=EmployeeItemDBModel.ITEM;
//                    listData.add(item);
//                    count++;
//                }
//            }
//        }


    }



    public void setSelectEmpl(EmployeeItemDBModel item) {
        model.setSelectEmpl(item);
    }

    /**
     * 获取选中的人员的集合---储存在model里
     * @return 集合
     */
    public List<EmployeeItemDBModel> getCheckList() {
        return model.getPeopleCheckList();

    }
}

/**
 * 获取组织结构更新时间的。
 * 但是逻辑里根本就没存本地数据库。
 * 所以注释掉留着，不用看他鬼扯
 *
 private void getFirstTime() {
 fragment.Get(HttpUrlConstant.getWebSiteFullUrl(HttpUrlConstant.AccountLastUpdateTime), new IReturnObject<String>() {
@Override
public void returnResult(String result) {
if(result!=null){
try {
JSONObject jsonResult = new JSONObject(result);
if (jsonResult.getBoolean("Succeed")) {
String newData = jsonResult.getString("Data");
//先看看是数据库否有这个值
try {
EmployeeResultDB er = fragment.getDB().findFirst(Selector.from(EmployeeResultDB.class).where("webSite","=",HttpUrlConstant.getWebSiteFullUrl()));

if(er==null){
getListDeptDataHomeByNet();
}
else{
String oldData = er.lastTime;
if (!oldData.equalsIgnoreCase(newData)) {
getListDeptDataHomeByNet();
} else {
LogUtils.d("直接从数据库中拿出数据，不走网络");
//直接从数据库中拿出数据，就不走网络了
fragment.initializeAdapter(er.result);
}
}
} catch (Exception e) {
LogUtils.d(e.getMessage().toString());
e.printStackTrace();
}
} else {
fragment.showError(new IReturnObject<String>() {
@Override
public void returnResult(String result) {
getFirstTime();
}
});
}
} catch (JSONException e) {
fragment.showError(new IReturnObject<String>() {
@Override
public void returnResult(String result) {
getFirstTime();
}
});
}
}
}
});
 }
 */

